{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab 20 - Hierarchical Clustering\n", "\n", "We will look at two datasets today as we study hierarchical clustering. \n", "\n", "## Clustering the Iris data\n", "\n", "The first is the [iris dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set), which contains 50 samples each of 3 types of irises (Iris setosa, Iris virginica and Iris versicolor). The 4 measurements for each iris are the length and width (in cm) of the [sepals](https://en.wikipedia.org/wiki/Sepal) and petals.\n", "\n", "The iris dataset is included in the sci-kit learn package, so we can load it from there." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "import scipy.cluster.hierarchy as shc\n", "\n", "from sklearn.preprocessing import MinMaxScaler\n", "\n", "from sklearn.cluster import AgglomerativeClustering\n", "\n", "from sklearn.metrics import confusion_matrix\n", "\n", "from sklearn import datasets\n", "\n", "%matplotlib inline\n", "pd.set_option(\"display.max_columns\", None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with the Boston housing dataset, we can load the iris dataset from sci-kit learn. The iris dataset is also in dictionary format." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'DESCR': '.. _iris_dataset:\\n\\nIris plants dataset\\n--------------------\\n\\n**Data Set Characteristics:**\\n\\n :Number of Instances: 150 (50 in each of three classes)\\n :Number of Attributes: 4 numeric, predictive attributes and the class\\n :Attribute Information:\\n - sepal length in cm\\n - sepal width in cm\\n - petal length in cm\\n - petal width in cm\\n - class:\\n - Iris-Setosa\\n - Iris-Versicolour\\n - Iris-Virginica\\n \\n :Summary Statistics:\\n\\n ============== ==== ==== ======= ===== ====================\\n Min Max Mean SD Class Correlation\\n ============== ==== ==== ======= ===== ====================\\n sepal length: 4.3 7.9 5.84 0.83 0.7826\\n sepal width: 2.0 4.4 3.05 0.43 -0.4194\\n petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)\\n petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)\\n ============== ==== ==== ======= ===== ====================\\n\\n :Missing Attribute Values: None\\n :Class Distribution: 33.3% for each of 3 classes.\\n :Creator: R.A. Fisher\\n :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)\\n :Date: July, 1988\\n\\nThe famous Iris database, first used by Sir R.A. Fisher. The dataset is taken\\nfrom Fisher\\'s paper. Note that it\\'s the same as in R, but not as in the UCI\\nMachine Learning Repository, which has two wrong data points.\\n\\nThis is perhaps the best known database to be found in the\\npattern recognition literature. Fisher\\'s paper is a classic in the field and\\nis referenced frequently to this day. (See Duda & Hart, for example.) The\\ndata set contains 3 classes of 50 instances each, where each class refers to a\\ntype of iris plant. One class is linearly separable from the other 2; the\\nlatter are NOT linearly separable from each other.\\n\\n.. topic:: References\\n\\n - Fisher, R.A. \"The use of multiple measurements in taxonomic problems\"\\n Annual Eugenics, 7, Part II, 179-188 (1936); also in \"Contributions to\\n Mathematical Statistics\" (John Wiley, NY, 1950).\\n - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.\\n (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.\\n - Dasarathy, B.V. (1980) \"Nosing Around the Neighborhood: A New System\\n Structure and Classification Rule for Recognition in Partially Exposed\\n Environments\". IEEE Transactions on Pattern Analysis and Machine\\n Intelligence, Vol. PAMI-2, No. 1, 67-71.\\n - Gates, G.W. (1972) \"The Reduced Nearest Neighbor Rule\". IEEE Transactions\\n on Information Theory, May 1972, 431-433.\\n - See also: 1988 MLC Proceedings, 54-64. Cheeseman et al\"s AUTOCLASS II\\n conceptual clustering system finds 3 classes in the data.\\n - Many, many more ...',\n", " 'data': array([[5.1, 3.5, 1.4, 0.2],\n", " [4.9, 3. , 1.4, 0.2],\n", " [4.7, 3.2, 1.3, 0.2],\n", " [4.6, 3.1, 1.5, 0.2],\n", " [5. , 3.6, 1.4, 0.2],\n", " [5.4, 3.9, 1.7, 0.4],\n", " [4.6, 3.4, 1.4, 0.3],\n", " [5. , 3.4, 1.5, 0.2],\n", " [4.4, 2.9, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.1],\n", " [5.4, 3.7, 1.5, 0.2],\n", " [4.8, 3.4, 1.6, 0.2],\n", " [4.8, 3. , 1.4, 0.1],\n", " [4.3, 3. , 1.1, 0.1],\n", " [5.8, 4. , 1.2, 0.2],\n", " [5.7, 4.4, 1.5, 0.4],\n", " [5.4, 3.9, 1.3, 0.4],\n", " [5.1, 3.5, 1.4, 0.3],\n", " [5.7, 3.8, 1.7, 0.3],\n", " [5.1, 3.8, 1.5, 0.3],\n", " [5.4, 3.4, 1.7, 0.2],\n", " [5.1, 3.7, 1.5, 0.4],\n", " [4.6, 3.6, 1. , 0.2],\n", " [5.1, 3.3, 1.7, 0.5],\n", " [4.8, 3.4, 1.9, 0.2],\n", " [5. , 3. , 1.6, 0.2],\n", " [5. , 3.4, 1.6, 0.4],\n", " [5.2, 3.5, 1.5, 0.2],\n", " [5.2, 3.4, 1.4, 0.2],\n", " [4.7, 3.2, 1.6, 0.2],\n", " [4.8, 3.1, 1.6, 0.2],\n", " [5.4, 3.4, 1.5, 0.4],\n", " [5.2, 4.1, 1.5, 0.1],\n", " [5.5, 4.2, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.2],\n", " [5. , 3.2, 1.2, 0.2],\n", " [5.5, 3.5, 1.3, 0.2],\n", " [4.9, 3.6, 1.4, 0.1],\n", " [4.4, 3. , 1.3, 0.2],\n", " [5.1, 3.4, 1.5, 0.2],\n", " [5. , 3.5, 1.3, 0.3],\n", " [4.5, 2.3, 1.3, 0.3],\n", " [4.4, 3.2, 1.3, 0.2],\n", " [5. , 3.5, 1.6, 0.6],\n", " [5.1, 3.8, 1.9, 0.4],\n", " [4.8, 3. , 1.4, 0.3],\n", " [5.1, 3.8, 1.6, 0.2],\n", " [4.6, 3.2, 1.4, 0.2],\n", " [5.3, 3.7, 1.5, 0.2],\n", " [5. , 3.3, 1.4, 0.2],\n", " [7. , 3.2, 4.7, 1.4],\n", " [6.4, 3.2, 4.5, 1.5],\n", " [6.9, 3.1, 4.9, 1.5],\n", " [5.5, 2.3, 4. , 1.3],\n", " [6.5, 2.8, 4.6, 1.5],\n", " [5.7, 2.8, 4.5, 1.3],\n", " [6.3, 3.3, 4.7, 1.6],\n", " [4.9, 2.4, 3.3, 1. ],\n", " [6.6, 2.9, 4.6, 1.3],\n", " [5.2, 2.7, 3.9, 1.4],\n", " [5. , 2. , 3.5, 1. ],\n", " [5.9, 3. , 4.2, 1.5],\n", " [6. , 2.2, 4. , 1. ],\n", " [6.1, 2.9, 4.7, 1.4],\n", " [5.6, 2.9, 3.6, 1.3],\n", " [6.7, 3.1, 4.4, 1.4],\n", " [5.6, 3. , 4.5, 1.5],\n", " [5.8, 2.7, 4.1, 1. ],\n", " [6.2, 2.2, 4.5, 1.5],\n", " [5.6, 2.5, 3.9, 1.1],\n", " [5.9, 3.2, 4.8, 1.8],\n", " [6.1, 2.8, 4. , 1.3],\n", " [6.3, 2.5, 4.9, 1.5],\n", " [6.1, 2.8, 4.7, 1.2],\n", " [6.4, 2.9, 4.3, 1.3],\n", " [6.6, 3. , 4.4, 1.4],\n", " [6.8, 2.8, 4.8, 1.4],\n", " [6.7, 3. , 5. , 1.7],\n", " [6. , 2.9, 4.5, 1.5],\n", " [5.7, 2.6, 3.5, 1. ],\n", " [5.5, 2.4, 3.8, 1.1],\n", " [5.5, 2.4, 3.7, 1. ],\n", " [5.8, 2.7, 3.9, 1.2],\n", " [6. , 2.7, 5.1, 1.6],\n", " [5.4, 3. , 4.5, 1.5],\n", " [6. , 3.4, 4.5, 1.6],\n", " [6.7, 3.1, 4.7, 1.5],\n", " [6.3, 2.3, 4.4, 1.3],\n", " [5.6, 3. , 4.1, 1.3],\n", " [5.5, 2.5, 4. , 1.3],\n", " [5.5, 2.6, 4.4, 1.2],\n", " [6.1, 3. , 4.6, 1.4],\n", " [5.8, 2.6, 4. , 1.2],\n", " [5. , 2.3, 3.3, 1. ],\n", " [5.6, 2.7, 4.2, 1.3],\n", " [5.7, 3. , 4.2, 1.2],\n", " [5.7, 2.9, 4.2, 1.3],\n", " [6.2, 2.9, 4.3, 1.3],\n", " [5.1, 2.5, 3. , 1.1],\n", " [5.7, 2.8, 4.1, 1.3],\n", " [6.3, 3.3, 6. , 2.5],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [7.1, 3. , 5.9, 2.1],\n", " [6.3, 2.9, 5.6, 1.8],\n", " [6.5, 3. , 5.8, 2.2],\n", " [7.6, 3. , 6.6, 2.1],\n", " [4.9, 2.5, 4.5, 1.7],\n", " [7.3, 2.9, 6.3, 1.8],\n", " [6.7, 2.5, 5.8, 1.8],\n", " [7.2, 3.6, 6.1, 2.5],\n", " [6.5, 3.2, 5.1, 2. ],\n", " [6.4, 2.7, 5.3, 1.9],\n", " [6.8, 3. , 5.5, 2.1],\n", " [5.7, 2.5, 5. , 2. ],\n", " [5.8, 2.8, 5.1, 2.4],\n", " [6.4, 3.2, 5.3, 2.3],\n", " [6.5, 3. , 5.5, 1.8],\n", " [7.7, 3.8, 6.7, 2.2],\n", " [7.7, 2.6, 6.9, 2.3],\n", " [6. , 2.2, 5. , 1.5],\n", " [6.9, 3.2, 5.7, 2.3],\n", " [5.6, 2.8, 4.9, 2. ],\n", " [7.7, 2.8, 6.7, 2. ],\n", " [6.3, 2.7, 4.9, 1.8],\n", " [6.7, 3.3, 5.7, 2.1],\n", " [7.2, 3.2, 6. , 1.8],\n", " [6.2, 2.8, 4.8, 1.8],\n", " [6.1, 3. , 4.9, 1.8],\n", " [6.4, 2.8, 5.6, 2.1],\n", " [7.2, 3. , 5.8, 1.6],\n", " [7.4, 2.8, 6.1, 1.9],\n", " [7.9, 3.8, 6.4, 2. ],\n", " [6.4, 2.8, 5.6, 2.2],\n", " [6.3, 2.8, 5.1, 1.5],\n", " [6.1, 2.6, 5.6, 1.4],\n", " [7.7, 3. , 6.1, 2.3],\n", " [6.3, 3.4, 5.6, 2.4],\n", " [6.4, 3.1, 5.5, 1.8],\n", " [6. , 3. , 4.8, 1.8],\n", " [6.9, 3.1, 5.4, 2.1],\n", " [6.7, 3.1, 5.6, 2.4],\n", " [6.9, 3.1, 5.1, 2.3],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [6.8, 3.2, 5.9, 2.3],\n", " [6.7, 3.3, 5.7, 2.5],\n", " [6.7, 3. , 5.2, 2.3],\n", " [6.3, 2.5, 5. , 1.9],\n", " [6.5, 3. , 5.2, 2. ],\n", " [6.2, 3.4, 5.4, 2.3],\n", " [5.9, 3. , 5.1, 1.8]]),\n", " 'feature_names': ['sepal length (cm)',\n", " 'sepal width (cm)',\n", " 'petal length (cm)',\n", " 'petal width (cm)'],\n", " 'filename': '/home/megan.owen/.local/lib/python3.4/site-packages/sklearn/datasets/data/iris.csv',\n", " 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),\n", " 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
\n", "" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", "0 5.1 3.5 1.4 0.2\n", "1 4.9 3.0 1.4 0.2\n", "2 4.7 3.2 1.3 0.2\n", "3 4.6 3.1 1.5 0.2\n", "4 5.0 3.6 1.4 0.2" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iris.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we will compare the rows using the Euclidean distance, we should scale all columns to be between 0 and 1. Do this below, storing the scaled data in the variable `iris_scaled` (see Lab 19)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.22222222, 0.625 , 0.06779661, 0.04166667],\n", " [0.16666667, 0.41666667, 0.06779661, 0.04166667],\n", " [0.11111111, 0.5 , 0.05084746, 0.04166667],\n", " [0.08333333, 0.45833333, 0.08474576, 0.04166667],\n", " [0.19444444, 0.66666667, 0.06779661, 0.04166667],\n", " [0.30555556, 0.79166667, 0.11864407, 0.125 ],\n", " [0.08333333, 0.58333333, 0.06779661, 0.08333333],\n", " [0.19444444, 0.58333333, 0.08474576, 0.04166667],\n", " [0.02777778, 0.375 , 0.06779661, 0.04166667],\n", " [0.16666667, 0.45833333, 0.08474576, 0. ],\n", " [0.30555556, 0.70833333, 0.08474576, 0.04166667],\n", " [0.13888889, 0.58333333, 0.10169492, 0.04166667],\n", " [0.13888889, 0.41666667, 0.06779661, 0. ],\n", " [0. , 0.41666667, 0.01694915, 0. ],\n", " [0.41666667, 0.83333333, 0.03389831, 0.04166667],\n", " [0.38888889, 1. , 0.08474576, 0.125 ],\n", " [0.30555556, 0.79166667, 0.05084746, 0.125 ],\n", " [0.22222222, 0.625 , 0.06779661, 0.08333333],\n", " [0.38888889, 0.75 , 0.11864407, 0.08333333],\n", " [0.22222222, 0.75 , 0.08474576, 0.08333333],\n", " [0.30555556, 0.58333333, 0.11864407, 0.04166667],\n", " [0.22222222, 0.70833333, 0.08474576, 0.125 ],\n", " [0.08333333, 0.66666667, 0. , 0.04166667],\n", " [0.22222222, 0.54166667, 0.11864407, 0.16666667],\n", " [0.13888889, 0.58333333, 0.15254237, 0.04166667],\n", " [0.19444444, 0.41666667, 0.10169492, 0.04166667],\n", " [0.19444444, 0.58333333, 0.10169492, 0.125 ],\n", " [0.25 , 0.625 , 0.08474576, 0.04166667],\n", " [0.25 , 0.58333333, 0.06779661, 0.04166667],\n", " [0.11111111, 0.5 , 0.10169492, 0.04166667],\n", " [0.13888889, 0.45833333, 0.10169492, 0.04166667],\n", " [0.30555556, 0.58333333, 0.08474576, 0.125 ],\n", " [0.25 , 0.875 , 0.08474576, 0. ],\n", " [0.33333333, 0.91666667, 0.06779661, 0.04166667],\n", " [0.16666667, 0.45833333, 0.08474576, 0.04166667],\n", " [0.19444444, 0.5 , 0.03389831, 0.04166667],\n", " [0.33333333, 0.625 , 0.05084746, 0.04166667],\n", " [0.16666667, 0.66666667, 0.06779661, 0. ],\n", " [0.02777778, 0.41666667, 0.05084746, 0.04166667],\n", " [0.22222222, 0.58333333, 0.08474576, 0.04166667],\n", " [0.19444444, 0.625 , 0.05084746, 0.08333333],\n", " [0.05555556, 0.125 , 0.05084746, 0.08333333],\n", " [0.02777778, 0.5 , 0.05084746, 0.04166667],\n", " [0.19444444, 0.625 , 0.10169492, 0.20833333],\n", " [0.22222222, 0.75 , 0.15254237, 0.125 ],\n", " [0.13888889, 0.41666667, 0.06779661, 0.08333333],\n", " [0.22222222, 0.75 , 0.10169492, 0.04166667],\n", " [0.08333333, 0.5 , 0.06779661, 0.04166667],\n", " [0.27777778, 0.70833333, 0.08474576, 0.04166667],\n", " [0.19444444, 0.54166667, 0.06779661, 0.04166667],\n", " [0.75 , 0.5 , 0.62711864, 0.54166667],\n", " [0.58333333, 0.5 , 0.59322034, 0.58333333],\n", " [0.72222222, 0.45833333, 0.66101695, 0.58333333],\n", " [0.33333333, 0.125 , 0.50847458, 0.5 ],\n", " [0.61111111, 0.33333333, 0.61016949, 0.58333333],\n", " [0.38888889, 0.33333333, 0.59322034, 0.5 ],\n", " [0.55555556, 0.54166667, 0.62711864, 0.625 ],\n", " [0.16666667, 0.16666667, 0.38983051, 0.375 ],\n", " [0.63888889, 0.375 , 0.61016949, 0.5 ],\n", " [0.25 , 0.29166667, 0.49152542, 0.54166667],\n", " [0.19444444, 0. , 0.42372881, 0.375 ],\n", " [0.44444444, 0.41666667, 0.54237288, 0.58333333],\n", " [0.47222222, 0.08333333, 0.50847458, 0.375 ],\n", " [0.5 , 0.375 , 0.62711864, 0.54166667],\n", " [0.36111111, 0.375 , 0.44067797, 0.5 ],\n", " [0.66666667, 0.45833333, 0.57627119, 0.54166667],\n", " [0.36111111, 0.41666667, 0.59322034, 0.58333333],\n", " [0.41666667, 0.29166667, 0.52542373, 0.375 ],\n", " [0.52777778, 0.08333333, 0.59322034, 0.58333333],\n", " [0.36111111, 0.20833333, 0.49152542, 0.41666667],\n", " [0.44444444, 0.5 , 0.6440678 , 0.70833333],\n", " [0.5 , 0.33333333, 0.50847458, 0.5 ],\n", " [0.55555556, 0.20833333, 0.66101695, 0.58333333],\n", " [0.5 , 0.33333333, 0.62711864, 0.45833333],\n", " [0.58333333, 0.375 , 0.55932203, 0.5 ],\n", " [0.63888889, 0.41666667, 0.57627119, 0.54166667],\n", " [0.69444444, 0.33333333, 0.6440678 , 0.54166667],\n", " [0.66666667, 0.41666667, 0.6779661 , 0.66666667],\n", " [0.47222222, 0.375 , 0.59322034, 0.58333333],\n", " [0.38888889, 0.25 , 0.42372881, 0.375 ],\n", " [0.33333333, 0.16666667, 0.47457627, 0.41666667],\n", " [0.33333333, 0.16666667, 0.45762712, 0.375 ],\n", " [0.41666667, 0.29166667, 0.49152542, 0.45833333],\n", " [0.47222222, 0.29166667, 0.69491525, 0.625 ],\n", " [0.30555556, 0.41666667, 0.59322034, 0.58333333],\n", " [0.47222222, 0.58333333, 0.59322034, 0.625 ],\n", " [0.66666667, 0.45833333, 0.62711864, 0.58333333],\n", " [0.55555556, 0.125 , 0.57627119, 0.5 ],\n", " [0.36111111, 0.41666667, 0.52542373, 0.5 ],\n", " [0.33333333, 0.20833333, 0.50847458, 0.5 ],\n", " [0.33333333, 0.25 , 0.57627119, 0.45833333],\n", " [0.5 , 0.41666667, 0.61016949, 0.54166667],\n", " [0.41666667, 0.25 , 0.50847458, 0.45833333],\n", " [0.19444444, 0.125 , 0.38983051, 0.375 ],\n", " [0.36111111, 0.29166667, 0.54237288, 0.5 ],\n", " [0.38888889, 0.41666667, 0.54237288, 0.45833333],\n", " [0.38888889, 0.375 , 0.54237288, 0.5 ],\n", " [0.52777778, 0.375 , 0.55932203, 0.5 ],\n", " [0.22222222, 0.20833333, 0.33898305, 0.41666667],\n", " [0.38888889, 0.33333333, 0.52542373, 0.5 ],\n", " [0.55555556, 0.54166667, 0.84745763, 1. ],\n", " [0.41666667, 0.29166667, 0.69491525, 0.75 ],\n", " [0.77777778, 0.41666667, 0.83050847, 0.83333333],\n", " [0.55555556, 0.375 , 0.77966102, 0.70833333],\n", " [0.61111111, 0.41666667, 0.81355932, 0.875 ],\n", " [0.91666667, 0.41666667, 0.94915254, 0.83333333],\n", " [0.16666667, 0.20833333, 0.59322034, 0.66666667],\n", " [0.83333333, 0.375 , 0.89830508, 0.70833333],\n", " [0.66666667, 0.20833333, 0.81355932, 0.70833333],\n", " [0.80555556, 0.66666667, 0.86440678, 1. ],\n", " [0.61111111, 0.5 , 0.69491525, 0.79166667],\n", " [0.58333333, 0.29166667, 0.72881356, 0.75 ],\n", " [0.69444444, 0.41666667, 0.76271186, 0.83333333],\n", " [0.38888889, 0.20833333, 0.6779661 , 0.79166667],\n", " [0.41666667, 0.33333333, 0.69491525, 0.95833333],\n", " [0.58333333, 0.5 , 0.72881356, 0.91666667],\n", " [0.61111111, 0.41666667, 0.76271186, 0.70833333],\n", " [0.94444444, 0.75 , 0.96610169, 0.875 ],\n", " [0.94444444, 0.25 , 1. , 0.91666667],\n", " [0.47222222, 0.08333333, 0.6779661 , 0.58333333],\n", " [0.72222222, 0.5 , 0.79661017, 0.91666667],\n", " [0.36111111, 0.33333333, 0.66101695, 0.79166667],\n", " [0.94444444, 0.33333333, 0.96610169, 0.79166667],\n", " [0.55555556, 0.29166667, 0.66101695, 0.70833333],\n", " [0.66666667, 0.54166667, 0.79661017, 0.83333333],\n", " [0.80555556, 0.5 , 0.84745763, 0.70833333],\n", " [0.52777778, 0.33333333, 0.6440678 , 0.70833333],\n", " [0.5 , 0.41666667, 0.66101695, 0.70833333],\n", " [0.58333333, 0.33333333, 0.77966102, 0.83333333],\n", " [0.80555556, 0.41666667, 0.81355932, 0.625 ],\n", " [0.86111111, 0.33333333, 0.86440678, 0.75 ],\n", " [1. , 0.75 , 0.91525424, 0.79166667],\n", " [0.58333333, 0.33333333, 0.77966102, 0.875 ],\n", " [0.55555556, 0.33333333, 0.69491525, 0.58333333],\n", " [0.5 , 0.25 , 0.77966102, 0.54166667],\n", " [0.94444444, 0.41666667, 0.86440678, 0.91666667],\n", " [0.55555556, 0.58333333, 0.77966102, 0.95833333],\n", " [0.58333333, 0.45833333, 0.76271186, 0.70833333],\n", " [0.47222222, 0.41666667, 0.6440678 , 0.70833333],\n", " [0.72222222, 0.45833333, 0.74576271, 0.83333333],\n", " [0.66666667, 0.45833333, 0.77966102, 0.95833333],\n", " [0.72222222, 0.45833333, 0.69491525, 0.91666667],\n", " [0.41666667, 0.29166667, 0.69491525, 0.75 ],\n", " [0.69444444, 0.5 , 0.83050847, 0.91666667],\n", " [0.66666667, 0.54166667, 0.79661017, 1. ],\n", " [0.66666667, 0.41666667, 0.71186441, 0.91666667],\n", " [0.55555556, 0.20833333, 0.6779661 , 0.75 ],\n", " [0.61111111, 0.41666667, 0.71186441, 0.79166667],\n", " [0.52777778, 0.58333333, 0.74576271, 0.91666667],\n", " [0.44444444, 0.41666667, 0.69491525, 0.70833333]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaler = MinMaxScaler(feature_range=(0, 1))\n", "iris_scaled = scaler.fit_transform(iris)\n", "iris_scaled" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we will plot a dendrogram (tree) of the distances between the irises." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 7)) \n", "plt.title(\"Dendrograms\") \n", "dend = shc.dendrogram(shc.linkage(iris_scaled, method='average'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can only plot the tree with the scipy package, so we need to use its linkage (clustering) function to produce the tree in a compatible format.\n", "\n", "However, it is easier to use the sklearn package implementation for all other analysis." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 1, 2,\n", " 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,\n", " 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cluster = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='average') \n", "clusters = cluster.fit_predict(iris_scaled)\n", "clusters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add the clusters to the `iris` dataframe as a new column." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "iris[\"cluster\"] = clusters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To see how our clustering did, let's create a scatter plot of two of the columns in iris (your choice of columns), colored by the cluster." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAFgCAYAAAAW6RbuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd8XNW16PHfUpdVbUtyBxtsihsGHAI4oTh0DDyKCR1CAgnBueQm974QLjW5IQl5kNBMJwmkERLg0gkXMD2AMRhj0wxxV7Nk9TrSen/skazRnJFGnnI08vp+PvNBs2fP0To6Ztacc/ZeW1QVY4wxxk9pfgdgjDHGWDIyxhjjO0tGxhhjfGfJyBhjjO8sGRljjPGdJSNjjDG+s2RkjDHGd5aMjDHG+M6SkTHGGN9l+B3AUB1zzDH67LPP+h2GMcYMRvwOIJWk3JnR1q1b/Q7BGGNMnKVcMjLGGDPyWDIyxhjjO0tGxhhjfGfJyBhjjO8sGRljjPGdJSNjjDG+s2RkjDHGd5aMjDHG+M6SkTFDUQFs8zmGbqAWaPU5DmPiKGHJSESmiMhLIrJGRFaLyGUefQ4TkXoReT/4uDpR8RgTkwrgQeDrwHeBT4AOH+LYCtwDnAj8G7DRhxiMSYBE1qYLAD9U1RUiUgC8KyLPq+qafv1eVdVFCYzDmNh0A08D3+zT9iywCpicxDg6gLuAK4PPXweeA94GxicxDmMSIGFnRqparqorgj83Ah8BkxL1+4xJmC3Anf3a6oB3kxxHrUccG4HKJMdhTAIk5Z6RiEwF9gXe8nj5IBFZKSLPiMisCO+/WESWi8jy6urqBEZqjIcsoMSjvTTJcaRHiCMvyXEYkwAJT0Yikg/8Hfi+qjb0e3kFsKuq7gPcCjzmtQ1VvVtV56vq/NLSZH8CmJ1eGfBzILdP21eAqUmOoxS4hdCL618HRic5DmMSIKHrGYlIJi4R/VFVH+n/et/kpKpPi8hSESlRVVsnwgwvM3AXml/B3SfaA5joQxz7A2uBN4DpwDRgrA9xGBNnCUtGIiLAfcBHqnpThD7jgUpVVRE5AHemVpOomIzZYaOAXYFzh0kcu/ochzFxlsgzowW4/3VXicj7wbYrgF0AVPVO4DTgEhEJ4GZNnKGqmsCYjDHGDEMJS0aq+hqDLLurqrcBtyUqBmOMManBKjAYY4zxnSUjY4wxvkvoaDqz86hvq6ehvYGG9gbG5I6hLK+M9LT05AdSCzQCzcAY/KtMsBVoADqBYmCcT3EYkyLszMjErK6tjpvfupldf7Mrs++YzT537sPa2rXJD6QGuBw3/2cWcCCwIflhUIUrHbQ7sBfwNaDchziMSSGWjEzM6trquGbZNShuIGR1SzXfffq71LbWJjeQTbgioj3WA9fgzpKSaSXweJ/nq4G7cdUajTGeLBmZmFU2hRdH+2TrJ7QH2pMbyOcebR8CLckNg5UebSuAJP85jEklloxMzHYp2oX8rPyQtpP3OpninOLkBjKf8LugZ+DuHSXT8R5t52I15IwZgCUjE7OSUSW8fMHL7D9hf0bnjObi/S/mykOuJDczd/A3xzUQ4Hnc/aIS4P8C5+EKjCbTJOARXLme8cAvgMOTHIMxKUZSreDB/Pnzdfny5X6HYTxUN1cT6A5QlFPEqMxR/gVSBXThCojm+BRDN1Ad/O9YXOVvs7MZcNK/CWVDu03clOYNk4rqZX4HgLvmYMO5jYmaXaYzxhjjO0tGxhhjfGfJyBhjjO8sGe1sunElc1r9DmSIKnFxR6MZ2DaEvhtJzFykRqA+Ads1ZgSyZLQz2YqrUHAScBn+lMoZqkrgKeBsXImdlUBThL5duFVQLwJOBv7GwAlsM/BT3FyknwJb4hMybbjJtufhVuz6XywpGTMIG023s+jAlaT5r+Dz14Bngbfxr5hoNFYBi/o8fwa3/He+R99K3MTXng/+l4G/AF/36LsZuBD4R/D5G8AHuL/RpBhj7omjp+LC/+L+3gti3K4xI5idGe0saoE7+rVtxM3JGa7qCF96sZ3Qum99vUv4GcjNeC9k38H2RNTj6WB7rJ4gvPTPr0m9S6PGJJElo51FOm7yZX8+zk0dVCbec4YincmVeLSVBbfTXxrQv0BEHvH5P8JrftEE7DqEMQOwZLSzKAVuIfQD8XRclYLhKg/4EaExziLy5a7dgYP7PB8FXA8UevTNx1X07uvaCH2H6qvA3n2ejwH+A++kaIwBrBzQzqUFV6LmdVzdtGm4JDWcdQIVwKu4Rer2YeB7OlXAx8H3LCDymRG4+0Y1uPtmX8adOU6MS9TuvtEHuBF1B+LOlnxYa9D4ysoBDYElI2OMSQxLRkNgl+mMMcb4zpKRMcYY31kyMsYY4ztLRsYYY3xnMx9MfNQDDcHHGNwotniNHqvETYDNwg299povZWKXyGNozCDszMjErg5X6WBXYDZu+PXaOG27HFgI7AXshqs7N5yrRqSqRB5DY6JgycjErg43gbRnlkA1cCnRV86OJADcDqzp0/YosDrG7ZpwiTqGxkTJkpGJXaVH28e46tWxaAPe82j/IMbtmnCJOobGRMmSkYndFMKraJ+Mq5gQi3zgnH5tAhwT43ZNuEQdQ2OiZMnIxK4Ut1zDfrgPr4uAqwgvRLojjsLVlxuHK2H0KK7oqImv/sfwW8TvGBoTBSsHZOKnGnefpxBX5DReOnBLYAjuQ9O+QiVOoo7hzsnKAQ2BDe028ZOooqtZDO8FAEeS4V4414xY9h3TGGOM7ywZGWOM8Z0lI2OMMb6zZGTipxU3STIRY2LKcTfXo9FC4iZr1gW3b4yJK0tGJj42ApcBJwG/xa2gGg9bgKeB84Bv4ya81kfo2wV8jhtafgrwd9wovHioBR7Gzb35dvD3dMVp28YYG01n4qACOAi3jDe4JcK3Aj8g9n9ha4Dj+zx/JthW5NG3Etif7clqGfAX4OsxxqDB39t3Au6TwThszpMxcWFnRiZ2W9ieiHrcgUtIsajF1abrqw14PEL/dwk/a7qZ2M/SaoBb+rXVAStj3K4xppclIxO7/mVkwC3zEOvyA5l4z3sZF6F/iUdbWXA7sciKsO0xMW7XGNPLkpGJ3VjcPZoeGcBviH0CZQHwI0Lro80EvhKh/+64y4U9RuFKCRXGGEch8EtCS+N8FZga43aNMb2sHJCJj2rcTf3PccmiFJcMYtWOuxf0Ku4+0Txg8gD9q3DVprcE4yjDndnEqiO47deAibj1lcrisF0zklk5oCGwZGSMMYlhyWgI7DKdMcYY31kyMsYY4ztLRsYYY3xnycgYY4zvElaBQUSmAA/gZoUocLeq3tyvj+CmJR6Hq/h1gaquSFRMI1FTRxP1bfVsa9vG2NyxlIwqITM91ok1Q9dW00ZmUybdjd0wGtLGpZGeEetEo6BK3CTTLNww67Hx2WxvLb1a3Jyh0ezcK5vWAw1AI+5vUUbsc8WMiVIiz4wCwA9VdSZwIHCpiMzs1+dYYEbwcTFu3r6JUnNHM39d/Vem3jyVOXfMYa/b9+L9iveTHkfb1jbSbk0jfVo6mXMyydwvE/0sTqM0y4Gv4YZS74arCxdtwdSBdAIvBbc5BzdH6eVg+86oDldlYldgFm4I/VpfIzI7mYQlI1Ut7znLUdVG4CNgUr9uJwEPqPNPoFhErNpXlOra6rjkqUsIdAcAaGhv4PzHzqeyqTKpcWQ0ZJB1Xdb2at1VkPZvabRXt8e24QCwFFjdp+3vwIexbRZwpYrOxc1jAldm6DxiL2GUquqAqwk5hiwhcdXPjeknKfeMRGQqsC/wVr+XJuHqPffYRHjCQkQuFpHlIrK8ujoeX4tHhpbOFjq6OkLaPqn5hG7tTmoc3ZXhvy/to7TtH/Q7qg3wumj7QYzbBXcG1L+idzU775mR1/eXj3DHwJgkSHgyEpF83PfZ76tqw45sQ1XvVtX5qjq/tDTWGjMjR0FWARMLJoa0HT/jeHIzk3vjI22XtLD6dJ0ndSLFMc75yye0UnaPY2LbLAA5wNx+bfux894zmkJ4jcGTCS3FZEwCJTQZiUgmLhH9UVUf8eiyGfe/QY/JhNd/NhGU5Zfx4nkvsmDKAgqzC1k8czF3LrqT4pwkf4KMhc6XOt2HeTEEvhlArhKy8uNQh+co4Ge4m+m7A48Rn2UbynDVv4/C1cA7BniU2OvppapS3JIbwWPIN4Gr2HmTs0m6hJUDCo6U+z1Qq6rfj9DneNyV6eOALwO3qOoBA23XygGFq2mpoaOrg7ysPAqzY60KuuPay9uRboECyCqMR0G4oA7cJTXBfWjG8yvUNtylqFzsLADcpcoAbtRins+xpD4rBzQEiVxcbwHuFvEqEekZ4nUFsAuAqt6JW8PzONy4nRbgGwmMZ8QaOypeY51jkz0hOzEbzgLGJ2bTjE7QdlPVznpmaHyXsGSkqq8xyDcDdadllyYqBmOMManBKjAYY4zxnSUjY4wxvrNkNAK0B9qpba2lq7sr7tuubKqMfhJtT3md1FoiyxgzDFgySnFbGrfw4xd+zEl/OYlb3r6F6ub4TAqubKrk9Q2vc+HjF/LNx7/JmxvfHHjbG4HLgP8D/BaoiUsYxpidRCJH05kEq2qu4tg/HssHla4kwWsbXmNtzVpuOPIG8rJiG5db0VTBIb87pLeawzNrn2Hld1ZSmucx3KoCOBhXPwPgFVwy+nfsX5gxJip2ZpTCmjqaehNRj/veu4/G9saYt33PintCygp1azf3rrjXu3M52xNRj6XsvHXejDFDZskohWWmZSL9Rs+PyR0Tl6l24/LHRdUGeE+OHIstP2CMiZoloxRWmF3I9w74Xu9zQbj12FspHRX7zMXz9zk/pO7d5MLJnDPHq1Acbi2gU/o8zwB+g02gNMZELWHlgBLFygGFqmmpYUP9BlZVreLgKQdTllcWt5JAG+s38s9N/0REOHDygUwunBy5czXwOa6Wxldwtd9GxSUMY1KVlQMaAktGxhiTGJaMhsAu0xljjPGdJSNjjDG+s2RkjDHGd5aMjDHG+M7mx6e4po4m6tvqqWurY0zuGEpGlZCZnhmXbVc3V9PQ7laKL8wu9K6+EFTfVk9jeyMNHQ2MyR1DWV4ZaRLhu04LrkJDLW49oTzcvKQINtZvpLGjkaz0LHLTc5lUNCly521AY/B3FDPgOkgdTR2k1aWh2xQZI3QXd5OVF8dFAY0xUbMzoxTW3NHMw6sfZurNU5l9x2z2un0vVlaujMu2q5qrOPmhk5l+63Sm3zqd0x4+jaqmKs++dW113Pr2rezym12YtXQW+9y5D5/VfOa94W7gPWAWMI/tS4nXeXffVL+JY/94LLOWzmLGrTNY8swSNtX3L/cQVAP8F7ArsDdwELDBu2ugPQDLIGN6BplzM8mYngGvBNuNMUlnySiF1bXV8Z2nvkOg232ANrQ3cN6j50VfZXsAj3/yOK9vfL33+SvrX+HZz5+NGMdVL12FBst1VzVXseTpJWxr3RbeeTNuPd+eikUB3MLzDeFdWztaue2d21hdvbq37bFPHgt5HrbtO/o8XwdcCzSHd9VqJeuCLGgPNrRB1vlZaHVqTXUwZqSwZJTCWjpb6OjqCGn7pOaTkJpyO+qdze+Etb29+W3Pvl7J76OtH9EWaPPe+Np+z9twl9X6aepoYlXVqrD2/vX4Im4XYJX3tiUg4ZXFq4Ptxpiks2SUwgqyC0JK9gAcP+N4cjNzY972OXPDS/+cNecsz75TiqaQn5Uf0nbyXidTnFMc3jkTOKpf22Q869uV5peyeObisPbjZhznHfR8wuvhfR13X6qfruwumNuvcd9guzEm6SwZpbCyvDJeOO8FFkxZQEFWAYtnLubORXd6J4EhmlU2izuOv4NJBZOYXDiZe064h71K9vLsWzqqlGXnL2Pf8ftSlF3Et/b9FlcecqV3UhwP3AOcDBTgSgc9B0zwjuOo3Y7imkOvoXRUKbuN3o2HTnuIsTkRRjuUAM/j7heNAf4DOB/PYTrZE7IJPBag+8huyIfuo7sJPBIge0L2AH8VY0yiWDmgEaCmpYaOrg7yMvMozIlPXTqAQFeAra1uHYiS3BIy0gcefFndXE2gO0BhduHg6ylV41aGzQAmDty1qbWJmrYaFGVy4eRB46ASN1CiGBjkJLG9uh1pF7qzu8kpzRm4szFDY9d8h8CSkTHGJIYloyGwy3TGGGN8Z8nIGGOM7ywZGWOM8Z0loxGgPdDOttZtdHWP3GHJ9W31NHU0+R2GMSZBLBmluPLGcq548QpO/MuJ3Pr2rVQ3V/sdUlzVt9XzwhcvsPjhxXzjsW/wUfVHtAfaB3+jMSalWKHUFFbVXMWxfzy2tx7daxteY23tWn55xC8HH1qdIlZWruSIB4/off7kZ0/yyZJP2KVoFx+jMsbEm50ZpbCmjqawwqj3vXdfb6XtVNfS2cKv//nrkLa2QBtPf/a0TxEZYxLFklEKy0zLRPpNZRidMxqRkTG9ISMtg3F548LavdqMManNklEKK8guYMkBS0Labjn2FkpHRV53KJVkpWdx+VcuDylvtHfJ3hw85WAfozLGJIJVYEhxNS01bKjfwKqqVRw8+WDK8ssozI5fSSC/dXV3UdlcyesbXqcop4h9xu3DuHw7MzIpYWRcokgSS0bGGJMYloyGwC7TGWOM8Z0lI2OMMb6zZGSMMcZ3UU16FZHRuFVnWoF1qnFY19oYY4wJipiMRKQIuBQ4E8jCLYeWA4wTkX8CS1X1paREaXxR3VzdO4G2MLuQ0jyfhoxXAvW4JcsLgQgLvSZaRVMFdW11jMocRUFWAaNzPdYzD9raspXG9kYC3QGKcoooyytLYqTGpJ6Bzoz+BjwAfFVV6/q+ICL7A+eKyG6qel8iAzT+qGqu4tSHTuW1ja8BcOiuh/LX0/5KWX6SP1TLgaOAD4PPTwOWAknOixvqNnDI7w5hff16AJZ8aQnXHnYtY0eFZ8bq5mq+/eS3efTjRwGYO24uz53zHOPzxyc1ZmNSScR7Rqp6pKo+2D8RBV97V1W/b4lo5Hry0yd7ExHAy+tf5tnPn01uEAFc4vmwT9vfgNXJDaO5o5krX7qyNxEB3PbObVQ0VXj2X1m5sjcRAXxQ+QF3v3v3iK6qbkysohrAICJzReREETml55HowIy/3tr0Vljb25vfTm4QbcAKj/aVHm0J1NLZwqqqVWHtn2/73LP/+xXvh7W9W/4ubYG2uMdmzEgxaDISkfuB+4FTgROCj0UJjsv47Oy5Z4e1nTn7zOQGkQ+EhwFHJzeM0bmjOX3m6SFtGWkZzBs/z7P/cTOOC2s7Z845I6aSujGJEM2Z0YGqOl9Vz1fVbwQfFyY8MuOr2WWzueP4O5hYMJFJBZO4e9HdzCydmfxAjgJ+irtHtBvwd9y4ziTKSMvgW/t9i38/8N8ZnTOavUv25vlzn6ckt8Sz/6SCSTy8+GGmFU+jdFQpP1v4MxZOW5jcoI1JMYOWAxKR+4AbVXVNckIamJUDSp5Ad4CtLVsBKMktISPdp+Wv2oFtwZ/L8G12XGtnK3VtdaRJ2qD18bq6u6hucQsdjskZQ1ZGVjJCNMOLlQMagmg+XR4A3hSRCtzHggCqqnMTGpnxXUZaxvAYAZYNDIMwcjNzyc3Mjapvelr68PjbGZMioklG9wHnAqsAm+xqjDEm7qJJRtWq+njCIzHGGLPTiiYZvScifwKewF2mA0BVH0lYVMYYY3Yq0SSjXFwSOqpPmwI7fTJqD7RT21rLmNwxZGdk+xpHS2cLhdmFpKel+xZHY1sjzZ3NlOWVkZY28CiDru4uGtobyMvMi+rmfnljOZlpmZTkeY9g66uhrYHWQGtUi/AFugM0tjdSkF1ARppPAzSMMYMnI1X9xo5sODg/aRFQpaqzPV4/DPgf4F/BpkdU9Sc78rv8sKVxC0vfWcor61/h0F0P5ZIvXcLEgiSPOcZ9SN/45o28vfltTt37VM6ac5YvNeTW1a3j+leu59PaTzlrzlmcuMeJjC/wvoFf3VzNHz74A49+/CgHTj6Qfz/w35lQMMGzb3ljOSsrV/Lrf/6awqxCrj70anYt3JXC3PDVbDu6OlhXt46fvPwTypvK+fb+3+aQXQ+JOJCgsqmSO9+9kxe+eIEjdzuSb8//ttWQM8Yn0Qzt/j1wWU9ZoGAF7xsHm2skIocATcADAySj/1DVIU2gHQ5Du8sby7nw8Qt5du328jiL9ljEPYvuifgBnAhVzVUc9eBRrKzcXpJgyQFL+MXXfpHUCZab6jdx8P0Hs7FhY2/bzxb+jB8e9MOwM8amjiZ++I8fcve7d/e27TdhP545+xnPRPDCFy9wxINH9D7PychhzXfXMG30tLC+G+s3MvfOudS1ba9g9YdT/sDZc8Jnzta21nLuo+fy9GdP97aduOeJ/O6k3w1YANWYIbCh3UMQzYyNuX3r06nqNmDfwd6kqq8AtTHENmy1BdpCEhHAU58+RXtXe4R3JEZTR1NIIgK4d8W9vZW2k2VL05aQRARwz4p7qGyqDOvb2N7I797/XUjbivIVNHc0h/WtaanhtnduC2lrC7Tx+Cfe42ne2fJOSCICWPrOUrY0bAnr29zRHJKIAJ745AmaO8PjMMYkXjTJKC14NgSAiIwhynWQonCQiKwUkWdEZFakTiJysYgsF5Hl1dXVcfrVOy5N0sjJyAlpy83MRSS5X4Qy0zKRfl++RueMTnoc+Zn5YW1jc8eSJuH/vESE4pzikLY0SSMzPTOsb3ZGtmeVg0j3gsbkjvFs89p2elq65zH0itkYk3jR/J93I27S609F5KfAG8ANcfjdK4BdVXUf4FbgsUgdVfXuYEmi+aWlPq2p00dRdhFXHnJlSNs1h15DUXZRUuMoyC5gyQFLQtpuPuZmSkcl929UnFvMCXuc0Ps8Iy2DG468gclFk8P6luSW8JujfxPSdtmXL6MgqyCsb35WPj/6yo9CktfeJXvzlV2+4hnHjDEz+PKkL/c+z83I5b8P/2/Pe2jF2cX85LDQW5T/ffh/MzrHLtEZ44dB7xkBiMhMoKe41ovRlgYSkanAk173jDz6rgPmq+rWgfoNh3tGABWNFVQ2V/Lmpjc5aPJBjMsbl9T7RT1qWmpYX7+eDyo/YMGUBYzLG0dhTvjN/UTb0rCFz2o/47Pazzh86uGMzR1LcW6xZ9+G9gYqmyp5fePr7DNuH3Yp2sVzXSBwJXi2tmzlpXUvUZRTxP4T9mdyYXiS67G5YTOrq1ezuWEzC6ctpDSvlFGZozz7bmvdxpbGLbyz5R2+NPFLTCyYaPeLTDzZPaMhiJiMRCRfVZsGfPMgfQZKRiIyHqhUVRWRA3Ar1eyqg2TH4ZKMjDFmEJaMhmCgez//IyLv44Zfv6uqzQAishtwOHA6cA8uiYQRkT8DhwElIrIJuAa3cDSqeiduzc5LRCQAtAJnDJaIjDHGjEwDXqYTkeNwK8osAMYAncAnwFPAfarqvdRlAtmZkTEmRdiZ0RAMOCpOVZ8Gnh6ojzHGGBMrG8dqjDHGd1aMayfS1d1FVXMVdW11FGQXUJhdSGF25JF31c3VvRNoi7KLBqwL19DWQH17PU0dTRTnFDMuf1zEOTudXZ1Ut1RT11ZHUXYRRTlF5GeFz1Xqsal+E40djWSlZ5GbmTtg2aVtrdto7GikpbOF4pziAdcUau1sZVvbNura6ijOKWZM7piwuUfGmOSwZLQT+az2Mw793aFUNVeRJmlcv/B6vjP/OxTlhM+Pqmqu4tSHTuW1ja8BcNjUw3jotIc8S/bUt9Vz29u3cfWyq+nWbsbljeOVb7zCHmP38IzjvYr3OPLBI2lobyAzLZP7TryPU2ee6jkEe1PDJo7907F8WPUhAKfsdQq3HnsrEwvDE1JNSw1Xv3Q1S5cvBWBa8TSWXbCMXYp2Cevb2dXJsnXLOOWvp9AWaCM3I5fHzniMw6ce7jlJ1hiTWFFdphORdBGZKCK79DwSHZiJr9rWWr7z5Heoaq4CoFu7+fELP6a+rd6z/5OfPtmbiACWrVsWVgKpx7a2bVz50pV0q1t7sbK5kkufupRtrdvC+lY2VXLOI+f0nnF1dndy8ZMXU9daF9a3PdDObW/f1puIAB75+BE+rP4wrC/A5sbNvYkI4F91/+LaZdfS0tES1ndry1bOffRc2gJtALQGWjnnkXN6l1k3ZiQTkWtF5D924H3FIvLdRMQ0aDISke8BlcDzuFF0TwFPJiIYkzjtgXY+3vpxSJuiVLd4l1d6a9NbYW1vb37bs69XDbo1W9f0ftD31a3drK1dG9LWFmijJRCeMJo7mllVtSqs/f2K9z3j6L9dgFVVqzzrzXV0dVDTWhPSVt1STWd3p+e2jTEAFANDSkbiDJprojkzugzYU1Vnqeqc4GPuUIIx/ivMLuTEPU8MaSvIKoi4dMPZc8MrXZ85+0zPvlOKppCXGVol/P/s9X/CatCBq7p91O5HhbRNKpjkec9ozKgxLJ65OKz9uBnHecax/4T9SZfQ9ZxOn3m6Z4mf3Mxc5pTNCWmbN34euRm5nts2JpWJyHki8kGwFuiD/V5bJiLzgz+XBKvhICKzRORtEXk/+N4ZwC+A3YNtvwr2+08ReSfY57pg21QR+UREHgA+BKYMFmM0yWgj4H0tx6SMvKw8fnr4Tzl/n/MpyCpg3/H78tIFL0WsYze7bDZLj1vKxIKJTCqYxF2L7mJm6UzPviWjSlh2wTLmjZ9HYXYhF867kKsPuZrczPAP9tG5o7n/pPs5ea+Tyc/K5+ApB/PCeS9EXEfomN2P4epDrqZkVAnTiqfxl1P/wrg870KppXml/OPcf7BXyV6MzhnNDw76ARfMu4CM9PBbo2V5ZTx+5uMcMe0I8jLzOHK3I3ns64/5shaUMYkULEJ9JbAwWAv0sijf+h3gZlWdB8wHNgGXA5+r6jxV/U8ROQqYARwAzAP2Dy4fRLB9afBEZv2gcQ5QDugHwR9nAXviLs/1XXb8pih3KK5s0mtsmjqaaGxvJCMtY9AP3kB3oPceSkluieeHel/VzdUEugMUZhcOup5SfVs9LZ0tZKVnRaxL16O5o5ma1hoEYWLBxAFXs1V1lx67ursozin2TIh9bWvdRlugjZyMHKvxuETdAAAgAElEQVRLZ+JtWEx6Dd5qGa+q/9Wn7VqgSVX/n4gsw60tt1xESoDlqjpVRM4C/gt4ALf46Wf9S7yJyP/DVdPpuembD/wceAF4SVXDFx6LYKBPl54yyhuCj6zgA9yy4yYF5WflDziMuq+MtIwBh0b3N5SziqKcIs9RfF7ysvKiXixQRIa0WqslIGMIsP0qWe/cBlX9k4i8BRwPPC0i3wa+6PdeAX6uqneFNLqkNaTFwSImI1Xtufa3WFUf7veLwi/kG2OMGY5eBB4VkZtUtSa4Jl1f64D9gbdxZzlAbx3SL1T1luAI6rnASrafqAA8B/xURP6oqk0iMglXNm7Iorln9OMo24wxxgwzqroa+BnwsoisBPrfYvl/uKLV7wF9Z7afDnwYLJg9G3hAVWuA10XkQxH5lar+A/gTbs27VbjC2eGLk0VhoHtGxwLHBQN6qM9LhcBMVT1gR35hrOyekTEmRQyLe0apYqAzoy3Au0Bb8L89j8eBoxMf2shT1VxFQ1tD3LfbEehgW+s2urq74r7txvZGGtsbo+pb11rH5obNdHUNHkd7Zzsb6zdS3xrdQM2GtgaaO4Z0CdoYk0IGume0ElgZvBZoMwFjUNFUwbJ1y7hnxT1MKpjEVYdcxdSiqWRmxF52pryxnBvfvJF3trzDKXudwllzzorL8OTmjmY+2voR1718HWmkcfVhV7PX2L0iDiRYV7eOn73yM9ZuW8uZs89k0YxFniV7ALY0buEPH/yBpz57iv3G78cPD/5hxNVb69vqebf8XW54/QYKswu57rDr2G30bmRnZMe8j8aY4WOgy3SrGGDUnF8TX1PtMl13dzcPfvAgF/zPBb1to3NGs/I7K5lSNOg8sAFVNVdx9B+ODqlIsOSAJfzyiF9GXGo7Wmuq1zDnjjm9JX7SJZ3V313NniV7hvXdWL+RBfcvYGPDxt626xdez/cP/H7Y0OqKpgquevEq7n3v3t62/SfszyNff8SzhtxrG17jq7/9au/znIwcPlnyiWdfY4YZu0w3BANdplsEnAA8G3ycHXw8g61xFLXypvKQemngarmtqFgR87abOprCSuPcu+LeiPXmhuKu5Xf1JiKALu3i3hX3evYtbyoPSUQAd6+427NMUEdXBw988EBI27vl79IeaA/r29LZwo1v3hjS1hZo4+nP7J+fMSPNQJfp1gOIyJGqum+fl34kIitwM3HNIDLTMxmT238kpZtEGvO20zIRBO1zAjs6ZzQisX8h8yoTNL7Ae85R/1JAAGNyx5CW5v1dpzinuLdgK0CapHlWys5Iy/CsthCpAoMxJnVFM7RbRGRBnycHR/k+gys787OFPwtZJ+egyQcxtXhqzNsuyC7g0i9dGtL2m2N+E7HEz1Cct895TMjfnpAmFUyKWJuuKKeIRTMW9T7PSMvgV0f+yvNS2ticsdxwxA0hbZfMv4TMtPBklJWexY8W/Iii7O2TY/cq2YuDpxw85P0xxgxvEe8Z9XYQ2R+4HyjCXQPdBlyoqrFfZ9oBqXbPCKC5vZnq1mpe/NeLTC6czKzSWUwqnBSXbW9t2cr6uvWsqlrFgikLGJc/bsAF86KlqlQ0VfDW5rcQhAMmHRCxqCq4BfA+3/Y5n9R8wsJpCynOLo64GN+mhk00tDfwyvpX2Hf8vkwsmBjx/llXdxeVTZW8tvE1CrML2Xf8vozLtzMjkxKGzT0jETkGuBlIB+5V1V/4HFKYQZNRb0eRIgBV9bVoaiomI2PMTmnoycjVg7se2AVXhu0KVP8UUxAi6cCnwJG4YqfvAGeq6ppYthtvEe8Zicg5qvqHPgVTe9oB/wqlGmPMiOQS0T1Az1DYXYF7ECHGhHQAsFZVv3C/Rv4CnAQMq2Q00L2fnrvSBREexhhj4ud6tieiHqOC7bGYhFsKqMemYNuwMtBoup4qrL9U1fAlO40xxsRTpMlzO8WkuoEXqHE+FJFK4NXg4zW/7xsZY8wItAF3ac6rPRabCV1pdXKwbVgZNBmp6vRg+fCv4ta1uF1E6oKr/5kU0hnopKK5gvr2egqyChiVOWrA0kHVzdU0dri6dIXZhZSMijw3qr6tnob2Bpo7mynOKaYsr4y0wZe9j0pVcxX1bfVkpmdSkFUw6GJ8xqSoKwi9ZwTQEmyPxTvADBGZhktCZwBnxbjNuBs0GYnIZGABLhntA6wGXktwXCYBPq39lIUPLKSquYo0SeO6w67jov0u8hwqXdVcxWl/PY1XN7wKwGFTD+Oh0x7yXLiuvq2epe8s5cqXrqRbuxmXN45XvvEKe4zdI+aYK5oqOOrBo1hVtQqA02aextLjltry4GbkUf0TboBYXEfTqWpARJbg1h5KB+4PLisxrETz1XUD8H3gGVU9SFWPV9WfJzguE2fljeVc+vSlvZUPurWbq1+6mpbOFs/+T376ZG8iAli2bhnPrX3Os++2tm1c8eIVveWDKpsrufSpS9nWui2mmAPdAZa+s7Q3EQH8bc3fWFM9rAYBGRM/qn9CdSqqacH/xpSItm9Wn1bVPVR1d1X9WTy2GW/RJKN9cWugnyUib4rIAyLyzQTHZeKso6uDj7d+HNKmKJXN4fXjAN7a9FZ42+bwNsCzBt2arWtoC8Q27qUt0Ma75e+Gtfevx2eMSX2DJqPgUhK/B36LW772UODqBMdl4qwwu5DjZxwf0laQVcCkAu8RnmfPPTusLVI5oClFU8Lq052050kU5RR59o9WflY+Z88Jj+Po6bacljEjzaDJSESWA28CJwMfAYeoqteIDzOMjc4dzU8O/wnnzj2X/Kx89h2/L8+f+3zEQQmzy2Zz+3G3MyF/AhMLJnLH8Xewd+nenn1LRpWw7IJl7DNuHwqyCrhw3oVcc+g1MS9jAXDU7kfxk8N+wtjcsUwtnsrfFv+NiQXe6yQZY1JXNLXpSlW1OknxDMrKAcWmtrWWpo4m0khjcpH3gnY9At0BtrZsBVzCyUgbeLxLVXMVXd1dFGQXkJ+VH7eY2wPt1LbWkiZplOaVxm2UnjEJNmxq06WCqGvTDReWjIwxKcKS0RDYV0xjjDG+s2RkjDEjmIjcLyJVIvKh37EMZKCq3acM9EZVfST+4RhjzM5LrgtfQkKviXmu0e+A23BTdIatge5InzDAawpYMkqg5o5murQrqoXyWjpaaGhvYOyosZ7Ldxtjhr9gIgpbQkKuE2JJSKr6iohMjT3CxBqoavc3khmIcdoD7Xyx7QuuWXYNjR2NXL7gcuaNnxdxzs6mhk3c+MaNvFfxHov2WMTZc84ecEVWY8ywNdASEnGpxDCcRVO1GxE5HpgF5PS0qepPEhXUzqyiqYJ979qX9q52AJ5d+yxvXPgGB005KKzvpoZNnPDnE3orEry8/mW+2PYF13/teopzipMatzEmZjv1EhLRTHq9E/g68D3cUMXFeJc5N3HwxKdP9CaiHjf98yZaO1vD+rZ2toaVxvnt+7+lsb0xoTEaYxIi0lIRsS4hkRKiGU13sKqeB2xT1euAg4DYyzEbT15VscfnjfeccJqZnon0m8owOmd0wmIzxiTUFbglI/qKxxISKSGaZNTzlbxFRCYCnYDdlEiQQ3Y9JGTpheKcYv7j4P/wHJgwKnMUF+9/cUjbr476FePzxyc8TmNMfAUHKVwErMcNElsPXBTraDoR+TOupNueIrJpuBa6jqYc0FXArcDXgNtxf6R7VfWqxIcXbmeowFDRVMGK8hU0dTTxlSlfYVz+ONLT0j37bmncwob6Dbxf8T6HTT2Msbljba0fY4YHq8AwBNEko2xVbe/5GTeIoa2nLdl2hmRkjBkRLBkNQTSX6d7s+UFV21W1vm+bMcYYE6uBKjCMByYBuSKyL9uzfCHhY+GNMcaYHTbQPKOjgQuAycBNfdob2ElGdxhjjEmOgSow/B74vYicqqp/T2JMxhhjdjLRVGB4XUTuAyaq6rEiMhM4SFXvG+hNInI/sAioUtXZHq8LcDNwHG4s/QWqumLIezCIquYqGtobyEzLpCCrgDGjxsRlu22BNmpba6lvq6cop4gxuWPIyciJ2L+iqYKGtgZyM3PJz8pndG7k+UDljeW0dLbQ2d1JflY+kwsHXgQvWl3dXVQ1V1HfXk9+Vj6F2YUD1r6rbq6mscNNoC3MLoy4KqwxxsQqmgEMvwWeA3rWev4U+H4U7/sdcMwArx8LzAg+LgbuiGKbQ1LRVMERDxzBjFtnMPXmqVzy1CVUN8e+aG1nVyfL1i1j+i3Tmbl0JtNvmc6rG14l0BXw7L+hfgMH33cwe96+J7v8Zheue/k6altqPftuadjCpU9fyvRbp7P37Xuz6E+L2NywOeaYAdbWrmXeXfPY+/a92fU3u3Ln8jupb6v37FvZVMnihxez+y27s/stu3P6w6dT1VwVlziMMckjIlNE5CURWSMiq0XkMr9j8hJNMipR1b8C3QCqGgC6BnuTqr4CeH/iOicBD6jzT6BYROI2mTbQHWDpO0tZVbWqt+2va/7Kmuo1MW+7uqWacx45h9aAmw/cGmjlnEfOobolPNE1dzRz5YtX8q+6f/W23fzWzZQ3lXtue2XlSh79+NGQ53e9exedXZ0xxVzbWsu3n/x2b0Lp1m4u/9/LqW/3TkZPffYUL69/uff5S+te4rnPn4spBmPMIISzENYhdAf/e1YcthoAfqiqM4EDgUuDV7iGlWiSUbOIjMVNdkVEDgS8P8GGZhKwsc/zTcG2MCJysYgsF5Hl1dXRndm0Bdp4t/zdsPb+tdx2RGdXJzWtNSFtVc1VdHaHJ4yWzpaQhNjj822fe277vYr3wtrer3ifpo6mHYzWaQ+08/HWj0PaFI14pvjWpreiajPGxIlLPPfgan9K8L/3xJqQVLW85xaIqjYCHxHhs9ZP0SSjHwCPA7uLyOu4BZq+l9Co+lHVu1V1vqrOLy2NrrpAflY+Z80OP4ZHTz865nhyM3OZUzYnpG3e+Hme94xG545m8czFIW0ZaRnMGz/Pc9uL9lgU1rZ41uIB7zFFoyiniBP2DF2iKj8rn4kFEz37nz337LC2M2afEVMMxpgBDbSERFwE1zXaFxh23ywHTUbBjHoocDDwbWCWqn4Qh9+9GZjS5/nkYFvcHDP9GK499FrG5o5lavFUHl78MBPyY78SWJZXxuNnPs7CqQvJzcjliGlH8NjXH/MscpqRlsFF+13EZV++jKLsIvYcuyfPnfNcxMEA4/PG8+DJD7Jr0a6MzR3L1YdczRHTjog55lGZo/jvw/+b8/Y5j/ysfOaNn8ey85dFjGN22WxuO/Y2xuePZ0L+BO44/g5mlg67M3tjRpKELiEhIvnA34Hvq2pDPLYZT9GUA8oBvgt8BXep7lXgTlVtG3TjLgs/GWE03fHAEtxoui8Dt6jqAYNtc6jlgNoD7dS21iIilI4qjVjjbUfUttbSHmgnJyNn0DOXls4W6tvqSZM0yvLKcIMJvXV2dbp7SgpjR40lLysvbjE3tjfS1NFEelq6Z/LsK9AdYGvzVhAoGVXiWTncGBPR0MoBCevwXp5nPcrUmAIRyQSeBJ5T1ZsG6++HaJLRX4FG4A/BprOAYlVdHPldvZViDwNKgErgGiATQFXvDA7tvg034q4F+IaqDpplrDadMSZFDDUZ9V92HNxn40Xojq/0Gvys/T1Qq6rRjIT2RTRfdWcHR2H0eElEBh2SpqpnDvK6ApdG8fuNMWbkU/4UTF/X4y7NbQCuiCURBS0AzgVWiUjPCK4rVPXpGLcbV9EkoxUicmBw+DUi8mXATk2MMSbeXOKJNfmEblL1NVKggng0yWh/4A0R6Vn6dhfgExFZhTvBmZuw6IwxxuwUoklGA1VRMMYYY2I2aDJS1fXJCMQYY8zOK5pJr8YYY0xCWTIyxhjjO0tGxhhjfGfJyBhjjO8sGRljjPGdJSNjjDG+s2RkjDHGd5aMjDHG+M6SkTHGGN9ZMjLGGOM7S0bGGGN8Z8nIGGOM7ywZGWOM8Z0lI2OMMb6zZGSMMcZ3loyMMcb4zpKRMcYY31kyMsYY4ztLRsYYY3xnycgYY4zvLBkZY4zxnSUjY4wxvrNkZIwxxneWjIwxxvjOkpExxhjfWTIyxhjjO0tGxhhjfGfJyBhjjO8sGRljjPGdJSNjjDG+s2RkjDHGd5aMjDHG+M6SkTHGGN9l+B2AMTu95maoq4PGRigqgpISyMz0OypjksrOjIzxU0sLPPIITJsGe+8NM2fCBx/4HZUxSWfJyBg/bdsGF10EnZ3ueV0dnHceVFX5G5cxSWbJyBg/tbRAe3to28cfQ3e3P/EY4xNLRsb4KT8fxo8PbTv2WMjJ8SceY3xiycgYP5WVwYsvwgEHQG4unHQS3H03FBf7HZkxSWWj6YzxU3q6G7jw1FPuvtGoUW5EnTE7GUtGxgwHJSV+R2CMr+wynTHGGN9ZMjLGGOM7S0bGGGN8Z8nImKGor4fWVr+jMGbESWgyEpFjROQTEVkrIpd7vH6BiFSLyPvBx7cSGY8xO6y2Fh5/HBYvhu99D9ats4mpxsRRwkbTiUg6cDtwJLAJeEdEHlfVNf26PqSqSxIVhzExU4Xnn4czztje9uij8OGHMGGCf3EZM4Ik8szoAGCtqn6hqh3AX4CTEvj7jEmMmhr49a9D22prraCpMXGUyGQ0CdjY5/mmYFt/p4rIByLyNxGZ4rUhEblYRJaLyPLq6upExGpMZJmZMHp0eLtVSTAmbvwewPAEMFVV5wLPA7/36qSqd6vqfFWdX1pamtQAjaGoCH75S8jO3t524IFu2QdjTFwksgLDZqDvmc7kYFsvVa3p8/Re4IYExmPMjttzT/j0U3jpJZg8GebMcXXljDFxkchk9A4wQ0Sm4ZLQGcBZfTuIyARVLQ8+PRH4KIHxGLPjsrNhl13g/PP9jsSYESlhyUhVAyKyBHgOSAfuV9XVIvITYLmqPg78m4icCASAWuCCRMVjjDFm+BJV9TuGIZk/f74uX77c7zCMMWYw4ncAqcTvAQzGGGOMJSNjjDH+s/WMjEmE8nJoaYGuLsjLg0leU+ySYOtWaGx0PxcUDLxuUkODe7S0QGGhGy2YFuH7alsbVFe7/gUF7uE1FyuV1dRAUxMEAu7vYdNKEsrOjIyJty1bXP266dPdkPATToDNmwd/X7xVVblaervt5h5nnOHavNTXw513wq67upj32w8+/zzytleuhLlzYfZsmDHD1e2rq0vMfvihuhouuQSmTnXH8eijoaLC76hGNEtGxsTbBx/A3/++/fl778Fdd7llxZPp6adh2bLtz194wdXY81JXB5dfvr34a3k5XHopbNsW3nfjRjfEvSf5dHS4D+6GhriG76tVq+Dhh7c/f+89uOced6ZrEsKSkTHxtmJFeNv777tLPsn0xhvhbW++6d23osIVhO1r9Wp3Oc7Lp5+GPm9tdZf3RgqvY/jOO5H/HiZmloyMibfjjw9vO+205N9TOfvs8La+lcf7mjIFRo0KbTvxRFcKqb/MTDjiiNC2iRPdvbGR4thjw9vOOmtk7eMwY8nImHibMAF+/3v3AT96NPzXf8GRRyY/jjlz4JZb3ECEcePgtttg5kzvvmPHulJHs2e7pHTuuXDtteEJCmD8eLj3Xpd0c3Lgy1+GZ58dWctpTJ4Mf/7z9mN47bX+HMOdiE16NSYROjvdfRdwH/R+faPu7HSjwsCNpMsYZABtVZW7L5Kf70bIDaSyEtrbIT3dv9GCidTV5QYygEtIfQvlRscmvQ6BDe02JhEyM10tO79lZrozmWgNpfjruHFDjyeVpKcP7W9nYmKX6YwxxvjOkpExxhjfWTIyxhjjO0tGydTQYPMUdlRjY+rNY2lp2V6KZzCtrW5AgN+TKpubI1dpMCaBLBklQ20tPPGEK82yZAmsW7d9prsZWH09vPqqmx9z0UXwySduxv9w1t4OH38M3/wmnHkmvPbawNUJNm2Cq65yfW+9dfsovGRbvx7+8z/dfJrf/tbK35jkUtWUeuy///6aUrq7VR96SNXNb3ePMWNUt2zxO7LU8NproX+73FzVDRv8jmpg69er5uSExv3mm959N25U3W+/0L6XXqpaW5vcmDduVN1ll9A4fvEL1ba25MYxsvj+eZlKDzszSrSaGrjpptC22lpXv8wMrKUFbrwxtK211dVcG86eeCL8cuxNN7nY+2ttDS89c999yS8dtGULbNgQ2nbXXe7SoTFJYMko0TIzobg4vN2rzYTKyPAu2z/cS/l7LdNQWuo94TQzE6Tf3Eg//m14TcotLo68hIQxcWb/0hKtqAhuuCF09vaBB8K0af7FlCqyslwl6cLC7W177AELFvgXUzQOO8wtq9CjqMjdi8nMDO+bmwvf+lZo2w03DG3yaTyMHg3HHbf9eXq6i2Py5OTGYXZaVg4oGdrb3eWOF190/3PPnZv8D5tU1dXlbqQvW+Y+1L/0pdSY+V9R4ao8Nza65DRunPuA97JlixvUsmIFLFzozqz8+PexZQt89JEbJHLkkS6OkbZgXnJZOaAhsGRkjDGJYcloCOwynTHGGN9ZMjLGGOM7S0bGGGN8Z8nIGGOM72w9I5N8nZ2wdasrkZOf7+azDLT43MaNbgJsRoZbWXSghdy2bHHlglpb3banTIncd+tWt92GBjd8PDd34DlMFRVudFxOjlt4bqD5QBs3ujgCAbda6kBxVFe7eBsb3XZLS10sXgIBVy6osdH9zUaNGjjmLVtcvTkR13fixMh9Gxrco6XF/T3KyuI3z6iqysWckeGOy9ix8dluW5ubRN5zDMeMccfHpB6/S0AM9ZFy5YBMuOXLVYuLXcmZrCzVP/9ZtaXFu+/Gjarz5m0vUXP66a4tUt9LLlEVcX2nT1f917+8+zY0qD75pOqoUa5vXp7qs8+qNjV591+/XnX33V1fEdUf/EC1piZyHKedtj3m/faLHPPWrar33ef+DqA6erTqW29591VVXb1adfx41zc9XfXnP1etrPTuu3mz6qGHbo9j4ULX5qWuTvWXv3TbBNUJE1Q//TRyHENRXh56DM88U7WqKvbtdnSoPvdc6DH83/9V7eyMfdvx4fvnZSo9fA9gqA9LRimuslJ1zz01rN6c14dka6vqj38c2hdUn3/ee9srVoT3veAC76Sxbp1qSUlo37Iy195fc7Pq+eeHb3v1au84nnkmvO9VV3kn3PXrVbOzQ/vOmuUdx5YtqocfHtpXRPWLL7zjuPPO8Djuu8+777p125N4z+PII1W3bfPuH63OTtVrrgmP4+WXY9uuqvt7eB3D4VP30ffPy1R62D0jk1xdXW5SZV+trd7LQzQ2wsqV4e39a7n1WLMmvO3DD72Xcei5VNhXVZW7DNZfc7N3HGvXesfhFd/773vH0dzsJkX3tWaN9+Wxjo7wfVSNXD/Oaz5epDl6FRVuW32tXu1dT28o2trc5N/+3nsvtu2C+3t4HcPOzti3bZLOkpFJruxsN7u/r4kT3X2E/kpL4eSTw9uPOcZ72wceGP4hfsIJ3hUbsrJg1qzQtrlzvevHFRfDqaeGtqWnw7x53nEcf3x426mneldVyMsLj+/oo72rNRQWwrHHhr8/0j20xYvD2047zbvvlCnunlJfJ54Ye528/Hy3/Ed/Rx0V23bB3VfzOoZ2zyg1+X1qNtSHXaYbATZtUl20yF2eOuAA1TVrVLu6vPtu3uwu1RUXq06Zovrgg5Evw1RWqj7xhLu3k5/v7h9Fukei6u6JHHKIu19z2GGqn30WuW9VlVvaIT/f3Yt6/nl3+S7S/v3ud6qTJ7u4r7jCtXlpa1NduVL1S19yf49Fi9ylu0g2bXL3XHJzVefMUX3jjchxlJer/upXqqWl7vLVTTdF/tu1tan+85/uEmFuruo556hWVESOYyiqq91lyp5j+Je/uHtU8fDFF6HHMNI9Qn/4/nmZSg8rB2T8UVfnLgFlZnpXue7ft6HBXUaaMMGd1UTS1eUWqxNxZw2DjdrauNEtdJiePnhR0JYWt9hfWpo7y+lfbbt/36oq16ewcPAabz1xZGW5fRxITc32EXIDjdIDd5msutr9XFo6+FlDVZX7GxYUeJ+t7qi2Nncce+KIVKdvR9TWukud2dluNN3wYeWAhsCSkTHGJIYloyGwe0bGGGN8Z8nIGGOM7ywZGWOM8Z0lI5MaamrcIIZotLVF3zdV1deHz08aSXaGY2hCWDIyw1tVlVsh9/zz4TvfcZM+vSbIghsF9q9/wZIlcPrp8PTTsG1bcuNNtJoaePBBN1/oRz+CzZv9jii+doZjaDzZaDozvL38slu2u0durktIU6eG9y0vd5Mg+354/f3vcMopiY4yOTo74de/dkmox7Rp8MYbMH68f3HF08g6hjaabgjszMgMX/X1cPPNoW2trfDEE979V6wI/xZ9001uHspIUFMDt98e2vavf22fRzQSeB3DG28cOcfQRGTJyAxfGRnekxgjTWT1Kl0zerR3iZ9UlJbmvY8jqfzNSD+GJiJLRmb4ystzl6QKC7e37bEHHHqod//p0+FLX9r+PCcHrr8+9P2prKzMnen1rb930kmDV3dIJTNmhB/Dn/985BxDE5HdMzLDW3u7q0r9j3+4b80HHTTw4npVVa5C9pYtsHChK0KanZ28eBOtqcnt4wsvwF57ucdAi+ulopFzDO2e0RBYMjLGmMSwZDQEdpnOGGOM7ywZGWOM8Z0lI2OMMb6zZGSMMcZ3CU1GInKMiHwiImtF5HKP17NF5KHg62+JyNRExmOMMWZ4SlgyEpF04HbgWGAmcKaIzOzX7ZvANlWdDvwa+GWi4jHGGDN8JfLM6ABgrap+oaodwF+Ak/r1OQn4ffDnvwFfExloLWdjjDEjUSKT0SRgY5/nm4Jtnn1UNQDUA2G1XkTkYhFZLiLLq0dSHS5jjDFAigxgUNW7VXW+qs4vHWmzzY0xxiQ0GW0GpvR5PjnY5tlHRDKAIqAmgTEZY0U/UfAAAAftSURBVIwZhhJWDiiYXD4FvoZLOu8AZ6nq6j59LgXmqOp3ROQM4BRVPX2Q7VYD63cgpBJg6w68L1WM9P2Dkb+PI33/YOTvY9/926qqx/gZTCpJWF12VQ2IyBLgOSAduF9VV4vIT4Dlqvo4cB/woIisBWqBM6LY7g5dpxOR5ao6f0femwpG+v7ByN/Hkb5/MPL3caTvXyIldJEQVX0aeLpf29V9fm4DFicyBmOMMcNfSgxgMMYYM7LtTMnobr8DSLCRvn8w8vdxpO8fjPx9HOn7lzApt56RMcaYkWdnOjMyxhgzTFkyMsYY47sRlYxEZIqIvCQia0RktYhc5tFHROSWYKXwD0RkPz9i3RFR7t9hIlIvIu8HH1d7bWu4EpEcEXlbRFYG9/E6jz4pW+09yv27QESq+xzDb/kRayxEJF1E3hORJz1eS9nj19cg+5jyxzDZEjq02wcB4IequkJECoB3ReR5VV3Tp8+xwIzg48vAHcH/poJo9g/gVVVd5EN88dAOLFTVJhHJBF4TkWdU9Z99+vRWew9Olv4l8HU/gt0B0ewfwEOqusSH+OLlMuAjoNDjtVQ+fn0NtI+Q+scwqUbUmZGqlqvqiuDPjbh/KP2Ls54EPKDOP4FiEZmQ5FB3SJT7l9KCx6Up+DQz+Og/yiZlq71HuX8pTUQmA8cD90bokrLHr0cU+2iGaEQlo76Cp/77Am/1eymaauLD3gD7B3BQ8DLQMyIyK6mBxUHw8sf7QBXwvKpGPIYDVXsfrqLYP4BTg5eR/yYiUzxeH85+A/xfoDvC6yl9/IIG20dI7WOYdCMyGYlIPvB34Puq2uB3PPE2yP6tAHZV1X2AW4HHkh1frFS1S1Xn4YrrHiAis/2OKZ6i2L8ngKmqOhd4nu1nEcOeiCwCqlT1Xb9jSZQo9zFlj6FfRlwyCl6H/zvwR1V9xKNLNNXEh63B9k9VG3ouAwXLMWWKSEmSw4wLVa0DXgL6F5scEdXeI+2fqtaoanvw6b3A/smOLQYLgBNFZB1uQc2FIvKHfn1S/fgNuo8pfgx9MaKSUfC6833AR6p6U4RujwPnBUfVHQjUq2p50oKMQTT7JyLje66/i8gBuGOcMv+ji0ipiBQHf84FjgQ+7tftceD84M+nAS9qiszejmb/+t3DPBF3bzAlqOqPVXWyqk7FFT5+UVXP6dctZY8fRLePqXwM/TLSRtMtAM4FVgWvyQNcAewCoKp34gq3HgesBVqAb/gQ546KZv9OAy4RkQDQCpyRSv+jAxOA34tIOi6R/lVVn5QYq70PI9Hs37+JyIm40ZO1wAW+RRsnI+j4RTTSj2GiWTkgY4wxvhtRl+mMMcakJktGxhhjfGfJyBhjjO8sGRljjPGdJSNjjDG+s2RkUlqwSnlY1eQo3jdRRP4W4bVlIjI/+PMVfdqnisiHUW7/+yJy3lDj8tjOEhG5MNbtGDPcWTIyOyVV3aKqp0XR9YrBu4QKVhW4EPjTkAMLdz/wvThsx5hhzZKRSSgRyRORp4KFWz8Uka8H2/cXkZdF5F0Rea5nxnrwrOTm4BowHwarSCAiB4jIm8H1Y94QkT0H+b1Picjc4M/vSXBdJxH5iYhc1PcsR0RyReQvIvKRiDwK5AbbfwHkBmP5Y3DT6SJyj7i1iP4RrKLQ30JgRbAIKCIyXUT+N/g3WCEiuwfP6F4Wkf8RkS9E5Bcicra4tY5WicjuAKraAqzr+TsYM1JZMjKJdgywRVX3UdXZwLPB+nq3Aqep6v64b/8/6/OeUcFCot8NvgauZM5XVXVf4Grg+kF+76vAV0WkCDcLfkGw/avAK/36XgK0qOrewDUE64ip6uVAq6rOU9Wzg31nALer6qz/3979hNgUhnEc/z5pMgmrUf4tKCZqmEhqkLKwsSJs1JSSsrLQJBsppjRkY0PWZDkbUiaZTFFmhDtpGmI2VlZkMYPMY/E+J+eOy53rzu3cmX6fzb3n3HOe99zFvW/Pe07PA3wGDlcYezeQL6J5J87pBHYBWfmpTuAUsJlUWaPd3XeSapnls6GRuG6RBWuhlQOS5jMKXDOzPuCeuw9FleoOYCDK6C3i9x80wF0Ad39iZsujltsyUhmdjaT+Py1Vxh0CTgMTwH1gv5ktAda7+7iVdxfdC1yPMUtmVvpH3Al3z0oxvQDWVThmFVGLzFITxDXu3h/xp2I/wHBWF9HM3gMP4/xRYF8u3idgU5XvKzKvaTKShnL3t5Zaux8Aes3sEdAPvHH3rr+dVmH7EvDY3Q/FRDJYZehhYAfwgVTCvw04SXnG8j++5d7/JJb0ZpgEWmuMNZ3bnqb8t9kaMUUWLC3TSUOZ2WrSEtht4CqwHRgHVphZVxzTYuVNALP7SntIVdW/kNoMZK0+jlcb192/kxq4HQWekTKlHv5coiP2HYsxO4Ctuc9+xLJiLcaADXEdX4GPZnYw4i+ODK0W7cCsnuITma80GUmjbQGeR5XxC0BvTBRHgD4zew28It1LyUyZ2UvgJnAi9l0BLsf+2Wb0Q6QmaJPxfm28znQDWGpmY8BFyrOnW0Ap9wDDbDwgLf1luklVnEvAU2BlDbEg3YMaqPEckXlFVbulqZjZINDj7iNFX0s94qm8s+7+rs4424Az7t49N1cm0pyUGYk0xjnSgwz1agPOz0EckaamzEhERAqnzEhERAqnyUhERAqnyUhERAqnyUhERAqnyUhERAr3C70fnj6MC3QvAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.relplot(x = \"sepal width (cm)\", y = \"petal width (cm)\", hue = \"cluster\", \\\n", " palette = [\"r\", \"g\", \"magenta\"], data = iris)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How well do you think the clustering algorithm worked from this graph?\n", "\n", "Let's compare it with the same plot, colored by the true type of iris.\n", "\n", "First, add a new column to the `iris` dataframe with the `target` data in the dictionary." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "iris[\"true\"] = iris_dict.target" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, plot the same two variables as above, colored by the true type of iris." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.relplot(x = \"sepal width (cm)\", y = \"petal width (cm)\", hue = \"true\", \\\n", " palette = [\"r\", \"g\", \"magenta\"], data = iris)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do your two plots compare? What happens if you try a different pair of variables?\n", "\n", "We can also use a confusion matrix to compare the predicted clusters with the real ones. Try it below." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[50, 0, 0],\n", " [ 0, 50, 0],\n", " [ 0, 17, 33]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusion_matrix(iris[\"true\"],iris[\"cluster\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What is the accuracy of this clustering method?\n", "\n", "What happens if you try Ward linkage instead?\n", "\n", "### Clustering labor market data\n", "\n", "The Federal Reserve Bank of New York has information about the labor market for recent college graduates [here](https://www.newyorkfed.org/research/college-labor-market/college-labor-market_compare-majors.html).\n", "\n", "The data in this table can be downloaded as an Excel file at the bottom of the page. If you open this file in Excel, you can save the last table as a CSV file. Alternatively, download the data as a CSV file from the course website.\n", "\n", "Open the CSV file in Jupyter or another text editor to see if there are extra lines that need to be accounted for when reading it in. Recall that `read_csv()` has the optional parameters `skiprows` and `skipfooter` (ignore the warnings this parameter generates).\n", "\n", "Additionally, set the index to be the `Major` column." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.4/site-packages/ipykernel_launcher.py:1: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.\n", " \"\"\"Entry point for launching an IPython kernel.\n" ] } ], "source": [ "labor = pd.read_csv(\"Nov2019_labor_market_majors.csv\", skiprows = 13, skipfooter = 3, \\\n", " index_col = \"Major\")" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unemployment RateUnderemployment RateMedian Wage Early CareerMedian Wage Mid-CareerShare with Graduate Degree
Major
Agriculture3.153.940,00060,00020.8
Animal and Plant Sciences3.057.435,00060,00034.8
Environmental Studies4.649.336,00065,00032.2
Architecture4.326.645,00075,00037.4
Ethnic Studies5.750.138,00057,00049.4
\n", "
" ], "text/plain": [ " Unemployment Rate Underemployment Rate \\\n", "Major \n", "Agriculture 3.1 53.9 \n", "Animal and Plant Sciences 3.0 57.4 \n", "Environmental Studies 4.6 49.3 \n", "Architecture 4.3 26.6 \n", "Ethnic Studies 5.7 50.1 \n", "\n", " Median Wage Early Career Median Wage Mid-Career \\\n", "Major \n", "Agriculture 40,000 60,000 \n", "Animal and Plant Sciences 35,000 60,000 \n", "Environmental Studies 36,000 65,000 \n", "Architecture 45,000 75,000 \n", "Ethnic Studies 38,000 57,000 \n", "\n", " Share with Graduate Degree \n", "Major \n", "Agriculture 20.8 \n", "Animal and Plant Sciences 34.8 \n", "Environmental Studies 32.2 \n", "Architecture 37.4 \n", "Ethnic Studies 49.4 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labor.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall we can look at the types of the columns using the pattern `df.dtypes`. " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Unemployment Rate float64\n", "Underemployment Rate float64\n", "Median Wage Early Career object\n", "Median Wage Mid-Career object\n", "Share with Graduate Degree float64\n", "dtype: object" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labor.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which two columns are not numerical types (integers or floats)? Can you guess why?\n", "\n", "The following code removes the commas and converts the type to float." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "labor[\"Median Wage Early Career\"] = labor[\"Median Wage Early Career\"].str.replace(\",\",\"\").astype(float)\n", "labor[\"Median Wage Mid-Career\"] = labor[\"Median Wage Mid-Career\"].str.replace(\",\",\"\").astype(float)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that the columns all have a numerical type." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Unemployment Rate float64\n", "Underemployment Rate float64\n", "Median Wage Early Career float64\n", "Median Wage Mid-Career float64\n", "Share with Graduate Degree float64\n", "dtype: object" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labor.dtypes" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unemployment RateUnderemployment RateMedian Wage Early CareerMedian Wage Mid-CareerShare with Graduate Degree
Major
Agriculture3.153.940000.060000.020.8
Animal and Plant Sciences3.057.435000.060000.034.8
Environmental Studies4.649.336000.065000.032.2
Architecture4.326.645000.075000.037.4
Ethnic Studies5.750.138000.057000.049.4
\n", "
" ], "text/plain": [ " Unemployment Rate Underemployment Rate \\\n", "Major \n", "Agriculture 3.1 53.9 \n", "Animal and Plant Sciences 3.0 57.4 \n", "Environmental Studies 4.6 49.3 \n", "Architecture 4.3 26.6 \n", "Ethnic Studies 5.7 50.1 \n", "\n", " Median Wage Early Career Median Wage Mid-Career \\\n", "Major \n", "Agriculture 40000.0 60000.0 \n", "Animal and Plant Sciences 35000.0 60000.0 \n", "Environmental Studies 36000.0 65000.0 \n", "Architecture 45000.0 75000.0 \n", "Ethnic Studies 38000.0 57000.0 \n", "\n", " Share with Graduate Degree \n", "Major \n", "Agriculture 20.8 \n", "Animal and Plant Sciences 34.8 \n", "Environmental Studies 32.2 \n", "Architecture 37.4 \n", "Ethnic Studies 49.4 " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labor.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scale the data in each column to be between 0 and 1." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can put the scaled data back into a dataframe:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "labor_scaled = pd.DataFrame(labor_scaled, columns = labor.columns, index = labor.index)\n", "labor_scaled" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the dendrogram using Ward linkage. To label the leaves as the majors, add the parameter `labels = labor_scaled.index` to the `dendrogram()` function. \n", "\n", "You might also want to increase the leaf font size using the optional parameter `leaf_font_size`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What do you notice about the tree? Do the relationships of the leaves make sense?\n", "\n", "Let's compute the cluster using sklearn." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add the predicted clusters as a column to the `labor` dataframe." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the clusters by using a filter to display only the rows in that cluster. Do the clusters make sense?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.8" } }, "nbformat": 4, "nbformat_minor": 2 }